adbb77815d38193d1c242f8905ebe6f4eb26f66c,core/baseLanguage/graphLayout/solutions/jetbrains.mps.graphLayout.orthogonalLayout/source_gen/jetbrains/mps/graphLayout/stOrthogonalLayout/RectOrthogonalLayouter.java,RectOrthogonalLayouter,doLayout,#Graph#Map#,49

Before Change


    for (int i = 0; i <= maxComponent; i++) {
      Graph subgraph = ListSequence.fromList(subgraphs).addElement(new Graph());
      MapSequence.fromMap(xSizes).put(subgraph, MapSequence.fromMap(new HashMap<Node, Integer>()));
      MapSequence.fromMap(ySizes).put(subgraph, MapSequence.fromMap(new HashMap<Node, Integer>()));
    }
    for (Node node : ListSequence.fromList(graph.getNodes())) {
      Graph subgraph = ListSequence.fromList(subgraphs).getElement(MapSequence.fromMap(components).get(node));

After Change


    Map<Graph, Map<Edge, Dimension>> subEdgeSizes = MapSequence.fromMap(new HashMap<Graph, Map<Edge, Dimension>>());
    for (int i = 0; i <= maxComponent; i++) {
      Graph subgraph = ListSequence.fromList(subgraphs).addElement(new Graph());
      MapSequence.fromMap(subNodeSizes).put(subgraph, MapSequence.fromMap(new HashMap<Node, Dimension>()));
      MapSequence.fromMap(subEdgeSizes).put(subgraph, MapSequence.fromMap(new HashMap<Edge, Dimension>()));
    }
    for (Node node : ListSequence.fromList(graph.getNodes())) {
      Graph subgraph = ListSequence.fromList(subgraphs).getElement(MapSequence.fromMap(components).get(node));
      Node newNode = subgraph.addNode();
      MapSequence.fromMap(newNodes).put(node, newNode);
      MapSequence.fromMap(nodeSubgraphs).put(node, subgraph);
      MapSequence.fromMap(MapSequence.fromMap(subNodeSizes).get(subgraph)).put(newNode, new Dimension(MapSequence.fromMap(nodeSizes).get(node).width + myEdgeDistance, MapSequence.fromMap(nodeSizes).get(node).height));
    }
    for (Edge edge : ListSequence.fromList(graph.getEdges())) {
      Edge newEdge = MapSequence.fromMap(newNodes).get(edge.getSource()).addEdgeTo(MapSequence.fromMap(newNodes).get(edge.getTarget()));
      MapSequence.fromMap(newEdges).put(edge, newEdge);
      Graph subgraph = MapSequence.fromMap(nodeSubgraphs).get(edge.getSource());
      MapSequence.fromMap(MapSequence.fromMap(subEdgeSizes).get(subgraph)).put(newEdge, new Dimension(MapSequence.fromMap(edgeSizes).get(edge).width + myEdgeDistance, MapSequence.fromMap(edgeSizes).get(edge).height + myEdgeDistance));
    }
    Map<Graph, GraphLayout> subgraphLayouts = MapSequence.fromMap(new HashMap<Graph, GraphLayout>());
    int shiftX = 0;
    for (Graph subgraph : ListSequence.fromList(subgraphs)) {
      GraphLayout curLayout = findSTLayout(subgraph, MapSequence.fromMap(subNodeSizes).get(subgraph), MapSequence.fromMap(subEdgeSizes).get(subgraph));
      curLayout = LayoutTransform.shift(curLayout, shiftX, 0);
      MapSequence.fromMap(subgraphLayouts).put(subgraph, curLayout);
      shiftX = curLayout.getContainingRectangle().x + curLayout.getContainingRectangle().width + 30;
    }
    GraphLayout layout = new GraphLayout(graph);
    for (Node node : ListSequence.fromList(graph.getNodes())) {
      Graph subgraph = MapSequence.fromMap(nodeSubgraphs).get(node);
      layout.setLayoutFor(node, MapSequence.fromMap(subgraphLayouts).get(subgraph).getLayoutFor(MapSequence.fromMap(newNodes).get(node)));
    }
    for (Edge edge : ListSequence.fromList(graph.getEdges())) {
      GraphLayout subgraphLayout = MapSequence.fromMap(subgraphLayouts).get(MapSequence.fromMap(nodeSubgraphs).get(edge.getSource()));
      layout.setLayoutFor(edge, subgraphLayout.getLayoutFor(MapSequence.fromMap(newEdges).get(edge)));
      layout.setLabelLayout(edge, subgraphLayout.getLabelLayout(MapSequence.fromMap(myMovedLabels).get(MapSequence.fromMap(newEdges).get(edge))));
    }
    if (myLayoutLevel == 0) {
      return MapSequence.fromMap(subgraphLayouts).get(ListSequence.fromList(subgraphs).getElement(0));